package fr.denis.service.tests;

import static org.junit.Assert.*;

import java.util.ArrayList;
import java.util.List;

import org.junit.Before;
import org.junit.Test;

import fr.denis.busines.BusinessStagiareImpl;
import fr.denis.entity.Organisme;
import fr.denis.entity.Stagiaire;
import fr.denis.interfaces.IDaoStagiaire;
import fr.denis.interfaces.business.IBusinessStagiaire;

public class BuninessServiceWithMock {

    Organisme organismeNominal;
    Stagiaire stagiaireNominal;
    Organisme organismeAlternatif;
    Stagiaire stagiaireAlternatif;

    IBusinessStagiaire businessStagiaire;

    @Before
    public void setUp() throws Exception {
        organismeNominal = new Organisme(1, "AFCEPF", "Malakoff");
        stagiaireNominal = new Stagiaire("hareau", "denis", "Fontenay", organismeNominal);
        stagiaireAlternatif = new Stagiaire("polo", "denis", "Paris", null);

        // ------------------------------------------------------

        businessStagiaire = new BusinessStagiareImpl();
        ((BusinessStagiareImpl) businessStagiaire).setDaoStagiaire(new IDaoStagiaire() {

            
            public Stagiaire renvoi(Stagiaire paramStagiaire) {
                paramStagiaire.setOrganisme(null);
                return paramStagiaire;
            }

            
            public List<Stagiaire> rechercher(String paramNomStagiaire) {

                List<Stagiaire> stagiaires = new ArrayList<Stagiaire>();
                if (paramNomStagiaire == "hareau") {
                    stagiaires.add(stagiaireNominal);
                    stagiaireNominal.setId(1);
                }
                if (paramNomStagiaire == "polo") {
                    stagiaires.add(stagiaireAlternatif);
                    stagiaireAlternatif.setId(2);
                }
                return stagiaires;
            }


            public List<Stagiaire> rechercher(int paramIdOrganisme) {
                List<Stagiaire> stagiaires = new ArrayList<Stagiaire>();
                stagiaires.add(stagiaireNominal);
                stagiaireNominal.setId(1);

                stagiaires.add(stagiaireAlternatif);
                stagiaireAlternatif.setId(2);
                return stagiaires;
            }

            public Stagiaire ajouter(Stagiaire paramStagiaire) {
                if (paramStagiaire.getNom() != null && paramStagiaire.getNom() != null) {
                    paramStagiaire.setId(3);
                }
                return paramStagiaire;
            }
        });
    }

    @Test
    public void RechercherNomExistant() {
        List<Stagiaire> stagiaires = businessStagiaire.rechercher(0, "hareau");
        assertNotNull(stagiaires);
        assertTrue(stagiaires.size() == 1);
        Stagiaire stagiaire = stagiaires.get(0);
        assertNotNull(stagiaire);
        assertNotNull(stagiaire.getId());
        assertNotNull(stagiaire.getOrganisme());
    }

    @Test
    public void RechercherNomInexistant() {
        List<Stagiaire> stagiaires = businessStagiaire.rechercher(0, "quica");
        assertNotNull(stagiaires);
        assertTrue(stagiaires.size() == 0);
    }

}
